const $app = getApp()
Component({
  properties: {},
  data: {
    // ===== 参数 =====
    param: {
      searchVal: null, // 查询内容
      assetsType: null, // 资产类型
    },
    // ===== 数据相关 =====
    data: [], // 所有资产数据
    searchData: [], // 查询内容列表
    // ===== 地图相关 =====
    type: true, // 显示电子or影像, true电子/false影像
    latitude: 31.39, // 纬度
    longitude: 120.95, // 经度
    scale: 11, // 缩放级别
    markers: [], // 地图标识
    markersBlue: '/image/btn_default.png', // 默认标识
    markersRed: '/image/btn_check.png', // 选中标识
    markerId: null, // 当前选中地图标识id
    markerData: {}, // 当前选中地图标识数据
    // ===== 列表数据 =====
    listData : {
      assetsType: $app.listData.assetsType_all // 资产类型
    },
    // ===== 地图图片路径 =====
    elemap: '/image/biaozhun.png',
    satmap: '/image/weixing.png'
    // ===== end =====
  },
  lifetimes: { // 组件生命周期
    attached () { // 组件生命周期: 在组件实例进入页面节点树时执行
      this.getMarkers() // 获取地图标识点
    }
  },
  methods: {
    model (e) { $app.$common_wx.model(e, this) }, // 双向绑定
    // ========== 获取地图标识点 ==========
    getMarkers () {
      $app.$common.openLoading() // 开启加载
      $app.$api.mapController.selectParentAssets({
        roledept: $app.userInfo.roledept
      }).then(({ data }) => {
        console.log('api-地图标识点', data)
        let markers = []
        data && data.length && data.forEach(b => {
          let obj = Object.assign({}, b)
          obj.longitude = b.locationX
          obj.latitude = b.locationY
          obj.iconPath = this.data.markersBlue
          const assetsTypeList = this.data.listData.assetsType
          obj.assetsTypeName = $app.$common.arrFindEl(assetsTypeList, b.assetsType, 'id', 'name') || ''
          markers.push(obj)
        })
        this.setData({ markers, data: markers })
        $app.$common.closeLoading() // 关闭加载
      }).catch((err) => {})
    },
    // ========== 查询 ==========
    search () {
      const data = this.data.data
      const searchVal = this.data.param.searchVal
      let searchData = []
      searchVal && data.forEach(b => {
        if (b.assetsAddress.includes(searchVal)) searchData.push(b)
      })
      this.setData({ searchData })
    },
    // ========== 查询获取焦点 ==========
    searchFocus () {
      this.mapTap()
      this.setData({
        ['param.assetsType']: null, // 资产类型必须为'全部'
        markers: this.data.data, markerId: null, markerData: {}
      })
      this.search() // 查询
    },
    // ========== 查询项点击事件 ==========
    searchItemTap (e) {
      const item = e.currentTarget.dataset.item
      this.markerTap({ detail: { markerId: item.id } }) // 点击地图标识点
      this.setData({ searchData: [] })
    },
    // ========== 资产类型改变时 ==========
    assetsTypeChange (e) {
      this.mapTap()
      const data = this.data.data
      const assetsType = this.data.param.assetsType
      let markers = []
      if (assetsType === null) {
        markers = data
      } else {
        data.forEach(b => {
          if (b.assetsType === assetsType) markers.push(b)
        })
      }
      this.setData({ markers, markerId: null, markerData: {} })
    },
    // ========== 切换地图类型 ==========
    typeChage (e) {
      const type = e.currentTarget.dataset.type
      if (type !== this.data.type)
      this.setData({ type})
    },
    // ========== 点击地图, 清空当前标识点 ==========
    mapTap (e) {
      if (this.data.markerId === null) return
      const markers = this.data.markers
      const i = $app.$common.arrFindIndex(markers, this.data.markerId, 'id')
      markers[i].iconPath = this.data.markersBlue
      this.setData({ markers, markerId: null, markerData: {} })
    },
    // ========== 点击地图标识点, 显示资产信息 ==========
    // 注: 点击地图标识点一定会先触发点击地图事件
    markerTap (e) {
      // 清空当前标识点
      this.mapTap()
      const markers = this.data.markers
      const markerId = e.detail.markerId
      // 设置当前点的图标和数据
      const i = $app.$common.arrFindIndex(markers, markerId, 'id')
      // 控制显示的中心位置和缩放级别
      this.setData({
        scale: 16,
        longitude: markers[i].locationX, // 经度
        latitude: markers[i].locationY // 纬度
      })
      markers[i].iconPath = this.data.markersRed
      const markerData = markers[i]
      this.setData({ markers, markerId, markerData })
    }
  }
})